package com.company.design.danli;
/*
    单利设计模式
    单利要求最多只有一个对象
 */
// 恶汉式单例模式
public class Singleton {
    /* 设立一个私有的变量，一开始类被初始化的时候就可以有一个静态的对象，
       然后设计一个可以取到变量的方法，让外面的类只能访问该方法，就可以造成单利 */
    private static Singleton singleton = new Singleton();

    private Singleton(){
    }

    public static Singleton getInstance(){
        return singleton;
    }
}
// 懒汉式单例模式  （Lazy） 延迟 加载
class Singletons{
    /* 设置一个私有变量，然后再外面取到该方法的时候去创建对象，不过此法为线程不安全的方法，所以要加锁 */
    private static Singletons singletons;
    private Singletons(){
    }
    public static synchronized Singletons getInstance(){
        if(null == singletons){
            singletons = new Singletons();
        }
        return singletons;
    }
}
// 枚举式
// 应用枚举设计单利模式，应为枚举构造方法本身就是私有的，所以枚举构造单利或者多利都非常方便
